package com.tangtang.common.Vaildatoroption;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

/**
 * 由@Constraint(validatedBy = { StatusVaildator.class })指向这个自定义校验文件
 * ConstraintValidator实现该接口，接口里面有两个泛型，一个是注解的名称，一个所在注解实体类属性的所使用的类型
 */
public class StatusVaildator implements ConstraintValidator<ListValue,Integer> {
    //定义一个set，接收的值不能重复
    private Set<Integer> set = new HashSet<>();
    //这个是初始化方法
    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] vals = constraintAnnotation.vals();//这个是可以拿到初始化的数组中的数据
        if (vals.length>0){
            for (int val:vals) {
                set.add(val);//将数据加入set里面
            }
        }else {
            System.out.println("数据为空！");
        }
    }

    //判断数据是否校验成功，里面的两个参数，
    //第一个是获取提交的校验值
    //第二个ConstraintValidatorContext提供的是由VaildationMessage.properties提供供的错误消息
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        //判断这个set是否包含这个value，如果包含就返回true,不包含就返回true
        //直接返回这个set
        return set.contains(value);
    }
}
